import javax.management.openmbean.OpenDataException;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestDemo3 {
    //如果这个方法被另一个方法在try中或者其他地方调用，那么那个调用的方法也要写throws
    //只是被catch捕捉到的语句不同
    public static void OpenFile(String filename)throws IOException {
        //这里就属于事前防御型，这个是先判断后执行（if语句）
        if(!filename.equals("Test.txt")){
            throw new FileNotFoundException("文件不存在");
        }
        throw new IOException("文件打开失败");
    }
    //提取一个数组
    public static char getElem(char[] arrays){
        return arrays[10];
    }
    public static void main(String[] args) {
        char[] arrays = new char[10];

        //这里就属于事后认错型的异常处理方式（先执行，遇到异常再处理）

        //try和catch语句可以捕捉异常，这是程序员手动处理异常的一个重要手段
        try {
            char ch = getElem(arrays);
            System.out.println(ch);
            //这里的异常谁先触发catch就会优先显式其异常内容,后面的内容不会执行
            String str = null;
            str.length();
            //这里就是一个异常
//            OpenFile("Test.txt");
        }/*catch(FileNotFoundException e){
            System.out.println("找不到文件");
//            e.printStackTrace();
        }*/catch (NullPointerException e){
        //如果在一个函数中未找到当前异常的catch，那么throw就会将异常传递给调用这个方法的方法，
        //但是在main中向上寻找就会让jvm自己去处理，这样就会导致程序崩溃
            System.out.println("空指针引用");
//            e.printStackTrace();
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("字符数组下标越界");
//            e.printStackTrace();
        }
    }
}
